<?php
/**
 * Page gestion des enseignants
 * Permet l'affichage, l'ajout, la suppression et la modification des enseignants
 *
 * @category actions
 * @package administration
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class enseignantAction extends shAction {
    /**
     * Fonction appellée automatiquement pour toutes les requêtes de l'action
     */
    public function init() {
	$this->setTitle('Gestion des enseignants');
	$this->addAriane(shRequest::link('administration'), 'Enseignant');
	$this->addJavascript('javascript/AdminEnseignant.js');
    }

    /**
     * Execute la méthode par défaut pour l'action user
     */
    public function execute($_filtre = null) {

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Filtrer');

	$filtre = shField::text('Nom ou prénom')
		->setValue($_filtre)
		->appendTo($formulaire);


	$formulaire->setSubmit(function($formulaire) {
	    shAction::redirect('administration','enseignant',null,array($formulaire->getField('Nom ou prénom')->getValue()));
	});
	
	// On récupère la liste des status
	$statuts = shSGBD::select('SELECT statut.id, statut.intitule FROM statut ORDER BY statut.intitule ASC');

	// Pour chaque statut on récupère les enseignants associés
	$enseignants = array();
	foreach ($statuts as $statut) {
	    if ($_filtre == null){
		$enseignants[$statut->id] = shSGBD::select('SELECT id,nom,prenom FROM enseignant '.
			'WHERE id_statut=:id_statut '.
			'ORDER BY nom,prenom ASC',
			array(':id_statut'=>$statut->id));
	    }else{
		$enseignants[$statut->id] = shSGBD::select('SELECT id,nom,prenom FROM enseignant '.
			'WHERE id_statut=:id_statut '.
			'AND ((nom LIKE :filtre)OR(prenom LIKE :filtre)) '.
			'ORDER BY nom,prenom ASC',
			array(':id_statut'=>$statut->id,':filtre'=>'%'.$_filtre.'%'));
	    }
	}

	// On transmet le tout au template
	$this->assign('status', $statuts);
	$this->assign('enseignants',$enseignants);
	$this->assign('formulaire', $formulaire);
    }

    /**
     * Ajouter un utilisateur
     */
    public function executeCreate($id_statut=null) {
	$this->setTitle('Ajout d\'un enseignant');
	$this->addAriane(shRequest::link('administration', 'enseignant'), 'Gestion des enseignants');

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Ajouter l\'enseignant');

	shField::text('Nom')
		->setHelper('Chaîne alphanumérique')
		->appendTo($formulaire);

	shField::text('Prénom')
		->setHelper('Chaîne alphanumérique')
		->appendTo($formulaire);

	shField::email('Adresse e-mail')
		->setRequired(false)
		->appendTo($formulaire);

	shField::text('Téléphone')
		->setRequired(false)
		->appendTo($formulaire);

	$select = shField::select('Statuts')
		->setValue($id_statut)
		->appendTo($formulaire);

	$statuts = shSGBD::select(
		'SELECT statut.id, statut.intitule '.
		'FROM statut '.
		'ORDER BY statut.intitule '
	);

	foreach ($statuts AS $statut) {
	    $select->addOption($statut->id, $statut->intitule);
	}

	// On affiche les ues que l'enseignant peut enseigner
	$multiselect = shField::multibox('Ues enseignées')
		->setRequired(false)
		->appendTo($formulaire);
	$ues = shSGBD::select('SELECT id,intitule FROM ue ORDER BY intitule ASC');
	foreach ($ues as $ue) {
	    $multiselect->addOption($ue->id, $ue->intitule);
	}

	$formulaire->setSubmit(function($formulaire) {
		    // Insertion de l'user
		    $id_enseignant = shSGBD::insert(
			    'INSERT INTO enseignant(nom, prenom, telephone, email, id_statut) '.
			    'VALUES(:nom, :prenom, :telephone, :email, :id_statut) ',
			    array(':nom' => $formulaire->getField('Nom')->getValue(),
			    ':email' => $formulaire->getField('Adresse e-mail')->getValue(),
			    ':prenom' => $formulaire->getField('Prénom')->getValue(),
			    ':telephone' => $formulaire->getField('Téléphone')->getValue(),
			    ':id_statut' => $formulaire->getField('Statuts')->getValue()
			    )
		    );

		    $ues = $formulaire->getField('Ues enseignées')->getValue();
		    foreach ( $ues AS $ue ) {
			shSGBD::insert('INSERT INTO enseigner(id_enseignant,id_ue) '.
				'VALUES (?,?)', array($id_enseignant,$ue));
		    }

		    // Redirection
		    shAction::redirect('administration', 'enseignant');
		});

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Modification d'un utilisateur
     */
    public function executeEdit($id_enseignant) {
	$this->setTitle('Modification d\'un enseignant');
	$this->addAriane(shRequest::link('administration', 'enseignant'), 'Gestion des enseignants');

	if ( !($enseignant = shSGBD::selectOne(
	'SELECT enseignant.id, enseignant.nom, enseignant.prenom, '.
	'enseignant.telephone, enseignant.email, enseignant.id_statut '.
	'FROM enseignant '.
	'WHERE id=? ',
	array($id_enseignant)
	))) {
	    throw new Exception('Enseignant inconnu');
	    return false;
	}

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Modifier l\'enseignant');

	shField::text('Nom')
		->setHelper('Chaîne alphanumérique')
		->setValue($enseignant->nom)
		->appendTo($formulaire);

	shField::text('Prénom')
		->setHelper('Chaîne alphanumérique')
		->setValue($enseignant->prenom)
		->appendTo($formulaire);

	shField::email('Adresse e-mail')
		->setRequired(false)
		->setValue($enseignant->email)
		->appendTo($formulaire);

	shField::text('Téléphone')
		->setValue($enseignant->telephone)
		->setRequired(false)
		->appendTo($formulaire);

	$select = shField::select('Statuts')
		->setValue($enseignant->id_statut)
		->appendTo($formulaire);

	$statuts = shSGBD::select(
		'SELECT statut.id, statut.intitule '.
		'FROM statut '.
		'ORDER BY statut.intitule '
	);

	foreach ($statuts AS $statut) {
	    $select->addOption($statut->id, $statut->intitule);
	}

	// On affiche les ues que l'enseignant peut enseigner
	$multiselect = shField::multibox('Ue(s) associée(s)')
		->setRequired(false)
		->appendTo($formulaire);
	$ues = shSGBD::select('SELECT id,intitule FROM ue ORDER BY intitule ASC');
	foreach ($ues as $ue) {
	    $multiselect->addOption($ue->id, $ue->intitule);
	}
	// On récupère les ues déja selectionnées
	$ueSelected = shSGBD::select('SELECT id_ue FROM enseigner WHERE id_enseignant=?', array($id_enseignant));
	$idUEs = array();
	foreach ($ueSelected as $ue) {
	    $idUEs[] = $ue->id_ue;
	}
	$multiselect->setValue($idUEs);

	$formulaire->setSubmit(function($formulaire) use($enseignant,$ueSelected) {
		    // Mise à jour de l'enseignant
		    shSGBD::update(
			    'UPDATE enseignant SET nom=:nom, prenom=:prenom, email=:email, telephone=:telephone, '.
			    'id_statut=:id_statut '.
			    'WHERE id=:id ',
			    array(':nom' => $formulaire->getField('Nom')->getValue(),
			    ':email' => $formulaire->getField('Adresse e-mail')->getValue(),
			    ':prenom' => $formulaire->getField('Prénom')->getValue(),
			    ':telephone' => $formulaire->getField('Téléphone')->getValue(),
			    ':id_statut' => $formulaire->getField('Statuts')->getValue(),
			    ':id' => $enseignant->id
			    )
		    );
		    // On vérifie les ues à ajouter
		    foreach ($formulaire->getField('Ue(s) associée(s)')->getValue() AS $ue ) {
			$flag = false;
			foreach ($ueSelected as $ueSelect) {
			    if ($ue == $ueSelect->id_ue) {
				$falg = true;
			    }
			}
			if ($flag == false) {
			    // On ajoute
			    shSGBD::insert('INSERT INTO enseigner(id_enseignant,id_ue) '.
				    'VALUES (?,?)', array($enseignant->id,$ue));
			}
		    }
		    
		    // On vérifie les ues a supprimer
		    foreach ($ueSelected as $ueSelect) {
			$flag = false;
			foreach ($formulaire->getField('Ue(s) associée(s)')->getValue() AS $ue ) {
			    if ($ue == $ueSelect->id_ue) {
				$flag = true;
			    }
			}
			if ($flag == false) {
			    // On ajoute
			    shSGBD::delete('DELETE FROM enseigner '.
				    'WHERE id_enseignant=? AND id_ue=?', array($enseignant->id,$ueSelect->id_ue));
			}
		    }


		    // Redirection
		    shAction::redirect('administration', 'enseignant');
		})

	;

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Suppression d'un enseignant
     * @todo raz de toute trace de l'enseignant dans les autres tables
     */
    public function executeDelete($id_enseignant) {
	$this->setTitle('Suppression d\'un enseignant');
	$this->addAriane(shRequest::link('administration', 'enseignant'), 'Gestion des enseignants');

	//  On retire toute trace de l'enseignant dans les autres tables
	//  Cela a un impact sur les tables
	//  enseigner
	//  séance

	//  On modifie la table séance
	shSGBD::update('UPDATE seance SET id_enseignant=null WHERE id_enseignant=?', array($id_enseignant));

	//  On supprime chaque enregistrement de la table enseigner
	shSGBD::delete('DELETE FROM enseigner WHERE id_enseignant=?', array($id_enseignant));

	// Suppression de l'enseignant
	shSGBD::delete('DELETE FROM enseignant WHERE id=?',array($id_enseignant));

	// Redirection
	shAction::redirect('administration', 'enseignant');
    }

}
?>